(C) 1996 AROS - The Amiga Replacement OS
flags: zero : result is zero negative : 0 overflow : square root could not be calculated
ALGORITHM: First check for a zero and a negative argument and take appropriate action. fnum1 = M * 2^E
If exponent is an odd number: fnum = ( M*2 ) * 2^ (E-1) Now E' = E-1 is an even number and -> sqrt(fnum) = sqrt(M) * sqrt(2) * sqrt (2^E') = sqrt(M) * sqrt(2) * 2^(E'/2) (with sqrt(M*2)>1) = sqrt(M) * sqrt(2) * 2^(E'/2) = sqrt(M) * 1/sqrt(2) * 2^(1+(E'/2)) = sqrt(M/2) * 2^(1+(E'/2))
If Exponent is an even number: -> sqrt(fnum) = sqrt(M) * sqrt (2^E) = = sqrt(M) * 2^(E/2)
Now calculate the square root of the mantisse. The following algorithm calculates the square of a number + delta and compares it to the mantisse. If the square of that number + delta is less than the mantisse then keep that number + delta. Otherwise calculate a lower delta and try again. Start out with number = 0;
Exponent = -1; Root = 0; repeat { if ( ( Root + 2^Exponent ) ^2 < Mantisse) Root += 2^Exponent Exponent --; } until you`re happy with the accuracy